//实现函数delayCall的函数声明
//delayCall接受一个函数作为入参，其实现延迟1s运行函数
//其返回promise，结果为入参函数的返回结果


/*js*/

/*function delayCall(func) {
    return new Promise(resolve => {
        setTimeout(() => {
            const result = func();
            resolve(result);
        }, 1000);
    });
}*/


type IDelayCall = <T extends () => any>(func: T) => ReturnType<T>;

type IReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

//关键字entends跟随泛型的出现，表示类型推断，其表达可类比三元表达式
//如 T===判断类型？类型A：类型B

//关键字infer出现在类型推荐中，表示定义类型变量，可以用于指代类型
//如：该场景下，将函数的返回值类型作为变量，使用新泛型R表示，使用在类型推荐命中的结果中

